import { Context } from "koa";
import roleService from "../service/role.service";
import { callbackData } from "../utils/data.handler";
import { access, sql } from "../logger";
import userService from "../service/user.service";

class RoleController{
    async create(ctx:Context){
        //获取数据
        let { name, code, status,permission,comment} = ctx.request.body;
        //操作数据库
        try {
            const res = await roleService.create({ name, code, permission,status,comment });
            // 返回结果
            access.info('角色添加成功', { name: res.name })
            ctx.body = callbackData('0', '角色添加成功')
        } catch (err) {
            sql.error('角色添加失败', err)
            console.error('角色添加失败', err)
            ctx.app.emit('error', callbackData('3', '角色添加失败'), ctx);
        }
    }
    async delete(ctx:Context) {
        let { ids = '' } = JSON.parse(JSON.stringify(ctx.query));
        if (!ids) {
            access.error('请选择删除角色')
            console.error('请选择删除角色')
            ctx.app.emit('error', callbackData('1', '请选择删除角色'), ctx);
            return false;
        }
        try {
            let idBox = ids.split(',');
            let res = await userService.getUserList({username: '', nickname:'', phone:'', page:0, size:0, depart_id:'', role_id:idBox[0], is_admin:'',status:''})
            let { count,rows } = res;
            if(count==0){
                await roleService.delete(idBox)
                // 返回结果
                sql.info('删除角色成功', { ids })
                ctx.body = callbackData('0', '删除角色成功')
            }else{
                sql.error('角色有人员，不得删除')
                console.error('角色有人员，不得删除')
                ctx.app.emit('error', callbackData('2', '角色有人员，不得删除'), ctx);
            }
        } catch (err) {
            sql.error('删除角色失败', err)
            console.error('删除角色失败', err)
            ctx.app.emit('error', callbackData('3', '删除角色失败'), ctx);
        }
    }
    async update(ctx:Context){
        const { id,name,code,status,permission,comment } = ctx.request.body;
        if (!id) {
            access.error('请选择更新角色')
            console.error('请选择更新角色')
            ctx.app.emit('error', callbackData('1', '请选择更新角色'), ctx);
            return false;
        }
        // 操作数据库
        try {
            await roleService.update({ id,name,code,permission,status,comment });
            // 返回结果
            access.info('更新角色成功', { name,code })
            ctx.body = callbackData('0', '更新角色成功')
        } catch (err) {
            sql.error('更新角色失败', err)
            console.error('更新角色失败', err)
            ctx.app.emit('error', callbackData('3', '更新角色失败'), ctx);
        }
    }
    async queryList(ctx:Context){
        const { id ,code,name,status } = JSON.parse(JSON.stringify(ctx.query)) || {};
        try {
            const res = await roleService.getList({ id ,code,name,status })
            // 返回结果
            if (res) {
                sql.info('查询成功', { name, code,status })
                ctx.body = callbackData('0', '查询成功', res)
            } else {
                sql.error('查询失败', { name, code,status })
                console.error('查询失败', { name, code,status })
                ctx.app.emit('error', callbackData('3', '查询失败'), ctx);
            }
        } catch (err) {
            sql.error('角色列表查询失败', err)
            console.error('角色列表查询失败', err)
            ctx.app.emit('error', callbackData('3', '角色列表查询失败'), ctx);
        }
    }
}

export default new RoleController